﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 实现一个简单的策略模式，其中策略由委托表示，允许在运行时切换策略。
// 任务:
// 定义一个委托 CalculationStrategy，它接受两个 int 参数并返回一个 int。
// 创建一个 Calculator 类，该类接受一个 CalculationStrategy 委托并使用它进行计算。
// 实现两种不同的计算策略：加法和乘法，并将它们传递给 Calculator 进行计算。
namespace CS_BEGINNER_TO_PROFICIENT.STD.DelegatedSTD
{
    public delegate int CalculationStrategy(int x, int y);

    public class DelegatedSTDP9
    {
        public CalculationStrategy strategy;

        public DelegatedSTDP9(CalculationStrategy strategy) => this.strategy = strategy;

        public int Calculate(int x, int y) => strategy(x, y);

        public static void Execute()
        {
            CalculationStrategy Add = (x, y) => x + y;
            CalculationStrategy Multiply = (x, y) => x * y;

            DelegatedSTDP9 delegatedSTDP9_1 = new DelegatedSTDP9(Add);
            DelegatedSTDP9 delegatedSTDP9_2 = new DelegatedSTDP9(Multiply);

            Console.WriteLine(delegatedSTDP9_1.Calculate(3, 4));
            Console.WriteLine(delegatedSTDP9_2.Calculate(3, 4));
        }
    }
}
